<?php
/**
 * 
 * Api para el manejo de los productos.
 * 
 * Con esta api podemos manipular los Productos Base
 *
 */
class PapiWS_Service_ProductTemplate
{
	/**
	 * Obtiene la info de un producto
	 * 
	 * Este metodo devuelve toda la info necesaria para crear un personalized product.
	 * 
	 * @param integer $productTemplateId NID del producto creado en drupal
	 * @return Array Puede devolver un array vacio en caso de que no encuentre el producto o un array con un ProductTemplateVO
	 */
	public function getInfo( $productTemplateId  )
	{
		
		if( empty( $productTemplateId )){
			throw new Ext_Exception('Tiene que enviar un product ID valido');
		}
		// try to find result in cache first
		//$cacheId = 'productTemplate_getInfo_'.$productTemplateId;
		//$res = Zend_Registry::get('cache')->load( $cacheId );
		//if (! $res ) {
		try {
			$res = $this->drupalCall( 
				'eserivces.view.get', 
				array( 
           			'get_products'
           			, array()
           			, array( $productTemplateId ) 
           		)
			);
            //Zend_Debug::dump( $res,'ProUDCTTEMPALTEVO');exit;
        } catch (Exception $e) {
            throw new Ext_Exception( $e );
        }
		//	Zend_Registry::get('cache')->save( $res, $cacheId );
		//}
		
		if( is_array( $res ) ) {
			$result = array();
			$faces = array();
			$image = '';
			foreach( $res as $r ) {
				switch ( $r['type']) {
					case 'capa_producto':
						$faces[] = new PapiWS_Model_FaceVO( $r ); 
						break;
					case 'producto':
						$productTemplate = new PapiWS_Model_ProductTemplateVO( $r );
						break;
					default:
											
				}
			}
//			Zend_Debug::dump( $faces, 'Faces' );exit;
			$productTemplate->faces = $faces;
			return $productTemplate;
		}
		return array();
	}

	public function createCustomNotebookTemplate($width, $height) {

		// TODO: get params from config
		$soaUrl = 'http://soa.ext.com.ar';
		$margin = 10; // 1cm

		$productTemplate = new PapiWS_Model_ProductTemplateVO( $r );
		$face = new PapiWS_Model_FaceVO(); 
		$face->name = 'Tapa Notebook';
		$face->maskWidth  = $width;
		$face->maskHeight = $height;
		$face->faceOrder  = 1;
		$face->eps = "/PapiWS/producttemplate/eps/width/$width/height/$height";
		$face->faceMask = "/PapiWS/producttemplate/mask/width/$width/height/$height";
		$face->faceMaskPreview = "/PapiWS/producttemplate/maskpreview/width/$width/height/$height";
		$face->faceBackground = "/PapiWS/producttemplate/background/width/$width/height/$height";

		$bbox = new PapiWS_Model_BoundingBoxVO();

		$bbox->top  = -$margin;
		$bbox->left = -$margin;
		$bbox->width = $width + $margin * 2;
		$bbox->width = $height + $margin * 2;

		$face->boundingBox = $bbox;
		$productTemplate->faces = $face;
		$productTemplate->name = 'Notebook tamaño variable';
		$productTemplate->description = 'Notebook de tamaño variable. El usuario puede var los tamaños para armar un skin del tamaño que necesite.';

		return $productTemplate;
	}

	private function drupalCall( $method, $params ) {

		$useKeys = false;

		if ( $useKeys ) {
			$domain = Zend_Registry::get('config')->webservices->security->domain;
			$timestamp = (string) time();
			$nonce = md5(time());
			$apiKey = Zend_Registry::get('config')->webservices->security->apiKey;
			$hash = hash_hmac( 
				'sha256', 
				$timestamp . ';' . $domain . ';' . $nonce . ';' . $method, 
				$apiKey
			);
			$allParams = array_merge(
				array( $hash , $domain , $timestamp , $nonce), $params
			);
		} else {
			$allParams = $params;
		}

		$client = new Zend_XmlRpc_Client( 
			Zend_Registry::get('config')->webservices->drupal->url  
		);
		$res = $client->call( 'eserivces.view.get', $allParams );

		return $res;
	}
}
